﻿using System;
using Renci.Data.Interop.OpenGIS.Sos_10;
using Renci.Data.Interop.OpenGIS.SensorML_101;
using Renci.Data.Interop.OpenGIS.Om_10;
namespace Renci.Data.Interop.OpenGIS.Gml
{
    /// <remarks/>
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObservationOfferingBaseType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObservationOfferingType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObservationCollectionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractSmlType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractProcessType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractDerivableProcessType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DataSourceType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractRestrictedProcessType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractPureProcessType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ProcessChainType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ProcessModelType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Renci.Data.Interop.OpenGIS.Om_10.ObservationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObservationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DirectedObservationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DirectedObservationAtDistanceType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractDiscreteCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RectifiedGridCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(GridCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MultiSolidCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MultiSurfaceCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MultiCurveCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MultiPointCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractContinuousCoverageType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DynamicFeatureType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BoundedFeatureType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractFeatureCollectionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FeatureCollectionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DynamicFeatureCollectionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ElementCoverageObservationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TimeSeriesObservationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(PointCoverageObservationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DiscreteCoverageObservationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TimeSeriesObsType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(PointCoverageObsType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DiscreteCoverageObsType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CalculationProcessType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ObservationProcessType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(InstrumentType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CategoryObservation))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ComplexObservation))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CountObservation))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(GeometryObservation))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MeasurementObservation))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TemporalObservation))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TruthObservation))]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.opengis.net/gml")]
    public abstract class AbstractFeatureType : AbstractGMLType
    {
        private BoundingShapeType _boundedBy;
        /// <summary>
        /// This property describes the minimum bounding box or rectangle that encloses the entire feature.
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute("boundedBy")]
        public BoundingShapeType BoundedBy
        {
            get
            {
                //  If BoundedBy is not specified then return the default one
                if (this._boundedBy != null && this._boundedBy.Item == null)
                {
                    this._boundedBy.Item = string.Empty;
                }

                return this._boundedBy;
            }
            set
            {
                this._boundedBy = value;
            }
        }

        /// <remarks>
        /// Deprecated in GML 3.1.0
        /// </remarks>
        [System.Xml.Serialization.XmlElementAttribute("priorityLocation", Type = typeof(PriorityLocationPropertyType))]
        [System.Xml.Serialization.XmlElementAttribute("location", Type = typeof(LocationPropertyType))]
        public LocationPropertyType Location
        {
            get;
            set;
        }
    }
}
